import MysFpDB from '../model/MysFpDB.js'

export class AutoFpTask extends plugin {
  constructor() {
    super({
      name: '自动获取设备指纹',
      dsc: '定时为没有fp的用户自动获取设备指纹',
      event: 'message',
      priority: 5000,
      task: {
        name: '自动获取设备指纹任务',
        cron: '0 0 2-3 * * ?', // 每天凌晨2-3点之间执行
        fnc: 'autoGenerateFp',
        log: false
      },
      rule: []
    })
  }

  async autoGenerateFp() {
    try {
      logger.info('[device-plugin] 开始执行自动获取设备指纹任务')
      
      // 获取所有用户
      const allUsers = await MysFpDB.findAllUsers()
      
      if (!allUsers || allUsers.length === 0) {
        logger.info('[device-plugin] 没有找到任何用户，跳过任务')
        return
      }
      
      // 筛选出没有设备指纹的用户
      const usersWithoutFp = []
      
      for (const user of allUsers) {
        const userData = user.dataValues
        // 检查是否没有device_fp或device_fp为空
        if (!userData.device_fp || 
            !userData.device_fp.data || 
            !userData.device_fp.data.device_fp) {
          usersWithoutFp.push(userData.ltuid)
        }
      }
      
      if (usersWithoutFp.length === 0) {
        logger.info('[device-plugin] 所有用户都已有设备指纹，跳过任务')
        return
      }
      
      logger.info(`[device-plugin] 发现 ${usersWithoutFp.length} 个用户需要获取设备指纹`)
      
      // 为每个没有fp的用户生成设备指纹
      let successCount = 0
      let failCount = 0
      
      for (const ltuid of usersWithoutFp) {
        try {
          // 随机延迟 1-10 秒，避免请求过于频繁
          const delay = Math.floor(Math.random() * 9000) + 1000
          await this.sleep(delay)
          
          logger.info(`[device-plugin] 正在为用户 ${ltuid} 生成设备指纹...`)
          
          // 生成默认设备指纹
          const defaultFp = await MysFpDB.generateDefaultDeviceFp()
          
          if (defaultFp && defaultFp.data && defaultFp.data.device_fp) {
            // 保存到数据库
            await MysFpDB.saveDB({
              ltuid: ltuid,
              device_fp: defaultFp,
              is_manual: false
            })
            
            logger.info(`[device-plugin] 用户 ${ltuid} 设备指纹生成成功`)
            successCount++
          } else {
            logger.error(`[device-plugin] 用户 ${ltuid} 设备指纹生成失败`)
            failCount++
          }
          
        } catch (error) {
          logger.error(`[device-plugin] 为用户 ${ltuid} 生成设备指纹时出错:`, error)
          failCount++
        }
      }
      
      logger.info(`[device-plugin] 自动获取设备指纹任务完成，成功: ${successCount}，失败: ${failCount}`)
      
    } catch (error) {
      logger.error('[device-plugin] 自动获取设备指纹任务执行失败:', error)
    }
  }
  
  // 延迟函数
  sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms))
  }
}